发起聊天(高级智能体)-http

概述

该接口用于通过 SSE(Server - Sent Events)方式发送聊天消息并接收大模型处理的流程和结果。

鉴权

出于安全考虑,必须将 TOKEN 存储于服务端并通过后端接口调用,避免在前端代码中直接暴露,以防止凭证泄露造成损失

请在 HTTP 请求的 请求参数中携带 token,见 请求参数

TOKEN获取可通过 个人令牌 和 OAuth 应用获取,具体见 个人令牌授权OAuth 授权码授权

应用秘钥private_key 的获取具体见 生成应用密钥

请求方法

  • URLhttp://IP:PORT/api/v1/chat/flow/sse/api
  • 方法POST

请求头

  • Content-Type: application/json

请求参数

  • chat_id (选填):聊天会话的唯一标识符,用于标识特定的聊天对话,格式为uuid,为空将自动生成。
  • chat_history (选填):聊天历史记录数组,包含之前的聊天消息,例如 [](空数组表示没有聊天历史)。
  • form (选填):表单数据对象,用于传递编排中高级变量,例如 {}(空对象表示没有表单数据)。
  • message (必填):当前要发送的聊天消息内容,例如 "hello",建议不要传入过长的文本。
  • file_list (选填):文件列表数组,包含要上传的文件信息,例如 [](空数组表示没有文件上传)。
  • private_key (必填):私钥,用于身份验证或加密解密等操作,例如 "xxx"
  • token (必填):令牌,用于授权访问接口,例如 "xxx"
  • runtime_model_config (选填):动态模型配置,指定大模型节点使用的模型,需要在节点内开启动态模型。列表接口
    • model_id (必填):模型ID
    • model_name (必填):模型名称
    • enable_deep_thinking_config (选填):是否启用思考配置,传入true启用,false不启用
    • deep_thinking (选填):是否思考 true开启思考,false关闭思考

请求参数数据格式说明

  • chat_history数据结构
[
  {
    "role": "user",
    "content": "你好"
  },
  {
    "role": "ai",
    "content": "你好!今天过得怎么样呀?😊 天气渐渐凉快起来了,你那边有什么特别的安排或者活动吗?"
  }
]

说明:role字段的值为user对应为用户提问,为ai则对应回答,聊天记录传入必须要成对的传入,即一个用户问题对应一个ai回答,建议chat_history数组长度约束成20,即10轮上下文对话(具体结合模型上下文长度)

  • form数据结构:
{
  "UploadFile_1760598654022":[{
      "file_path": "xxx",
      "object_name": "xxx",
      "file_name": "xxx",
      "hash_code": "xxx"
    }],
  "InputTextera_1764556081172": "xxx"
}

说明:高级变量中上传文件、上传图片的数据结构是数组,需要先调取附件上传 接口,然后将全部返回内容封装成数组放入参数中,其余都为字符串,即使在编排页面创建了多个表单,仍需将对应每个高级表单的字段全部放在一个集合中,即全部封装传入到form中,表单中高级字段对应的key值可以通过以下操作获取 登录进入对应智能体平台->进入要调用的智能体的编排界面->点击开始节点中对应表单的编辑按钮->点击预览按钮->填入对应字段值->点击获取数据按钮->复制即可

  • file_list数据结构:
[
    {
      "file_path": "xxx",
      "object_name": "xxx",
      "file_name": "xxx",
      "hash_code": "xxx"
    }
  ]

说明:文件上传需要先调用 附件上传 接口,然后将全部返回内容封装成数组放入参数中。图片目前只支持通过form字段传入解析

响应格式

响应是服务器发送的事件流,每个事件由以下部分组成:

  • event :事件类型,例如 workflow 表示工作流相关事件,end 表示结束事件。
  • data :事件数据,包含具体的事件信息和数据内容。

工作流事件数据结构

eventworkflow 时,data 的结构如下:

  • node_id :节点的唯一标识符,用于标识工作流中的特定节点,例如 "genericNode-07854"
  • node_name :节点名称,描述该节点的功能或作用,例如 "开始""大模型_1"
  • type :节点类型,例如 start 表示开始节点,llm 表示大语言模型节点,content 表示内容节点等。
  • category :事件类别,例如 start 表示开始类别,content 表示内容类别,end 表示结束类别等。
  • cost_time :消耗时间,记录节点处理所花费的时间,例如 "1.44s"
  • extra :额外信息对象,用于存储其他相关的附加信息,例如 {}(空对象表示没有额外信息)。
  • output_str :输出字符串,包含节点的输出结果,例如 "Hello! How can I help you today? Is there anything specific you would like to know or discuss?"
  • only_id :唯一标识符,用于区分不同的事件实例,例如 "2cbff977-cc92-4cf8-aed2-1bc2eaab0eae"
  • output :输出内容,可以是字符串、对象或其他数据类型,具体取决于节点的处理逻辑,例如 "Hello""!" 等表示大模型生成的部分输出内容。

结束事件数据结构

eventend 时,data 的结构如下:

  • type :事件类型,固定为 end,表示整个流程结束。
  • only_id :唯一标识符,与工作流事件中的 only_id 对应,用于关联结束事件与之前的工作流事件。
  • output :最终输出结果,包含整个流程的处理结果,例如 "Hello! How can I help you today? Is there anything specific you would like to know or discuss?"
  • knowledge_source :知识来源对象,包含引用的图片、知识来源段落等信息,例如 {refer_picture: [], knowledge_source: [], refer_paragraph: []}
  • answer_files :回答文件数组,包含生成的回答相关的文件信息,例如 [](空数组表示没有文件)。
  • url_config :URL 配置对象,用于存储与 URL 相关的配置信息,例如 {}(空对象表示没有 URL 配置)。
  • msg_id :消息唯一标识符,用于标识整个消息会话,例如 "xxx"

示例请求

curl --request POST \
  --url http://IP:PORT/api/v1/chat/flow/sse/api \
  --header 'Content-Type: application/json' \
  --data '{
        "chat_id": "2fd2431f44ad",
        "chat_history": [],
        "form": {},
        "message": "hello",
        "file_list": [],
        "private_key": "xxx",
        "token":"xxx"
}'

示例响应

服务器会发送一系列事件流作为响应,例如:

event: workflow
data: {"node_id": "genericNode-07854", "node_name": "开始", "type": "start", "only_id": "2cbff977-cc92-4cf8-aed2-1bc2eaab0eae", "output": ""}

event: workflow
data: {"node_id": "BigModel-c53b5", "node_name": "大模型_1", "type": "llm", "category": "start", "cost_time": null, "extra": {}, "output_str": ""}

event: workflow
data: {"node_id": "BigModel-c53b5", "node_name": "大模型_1", "type": "llm", "category": "content", "only_id": "2cbff977-cc92-4cf8-aed2-1bc2eaab0eae", "output": "Hello"}

...
...
event: workflow
data: {"node_id": "BigModel-c53b5", "node_name": "大模型_1", "output_str": "Hello! How can I help you today? Is there anything specific you would like to know or discuss?", "cost_time": "1.44s", "type": "llm", "category": "end"}

event: workflow
data: {"type": "end", "only_id": "2cbff977-cc92-4cf8-aed2-1bc2eaab0eae", "output": "Hello! How can I help you today? Is there anything specific you would like to know or discuss?", "knowledge_source": {"refer_picture": [], "knowledge_source": [], "refer_paragraph": []}, "answer_files": [], "url_config": {}, "msg_id": "034b4e2865124697aaab587a06d17bbe"}

状态码

  • 200 OK :请求成功,服务器正常返回事件流数据。

注意事项

  • 客户端需要支持接收和解析 SSE 事件流。
  • 确保请求参数中的 chat_idprivate_keytoken 等关键字段正确无误,否则可能导致请求失败或未授权访问。
  • 由于大模型的处理可能需要一定时间,客户端应做好等待和处理延迟的准备。
  • private_keytoken 等关键字段的获取需要前往扳手AI平台 智能体-调用-应用API-KEY 和智能体-调用-认证授权-KEY分别获取